#ifndef __ming_fyp_core_Tuple_h__
#define __ming_fyp_core_Tuple_h__

//------------------------------------------------------------------------------
// header includes
#include <ttl/tup/tuple.hpp>
using namespace ttl::tup;

//------------------------------------------------------------------------------
namespace ming
{
namespace fyp
{
namespace core
{
	//--------------------------------------------------------------------------
	template<typename T1, typename T2>
	static tuple<T1, T2> make_tuple(
		const T1 &t1,
		const T2 &t2)
	{
		return tuple<T1, T2>(t1, t2);
	}

	template<typename T1, typename T2, typename T3>
	static tuple<T1, T2, T3> make_tuple(
		const T1 &t1,
		const T2 &t2,
		const T3 &t3)
	{
		return tuple<T1, T2, T3>(t1, t2, t3);
	}

	template<typename T1, typename T2, typename T3, typename T4>
	static tuple<T1, T2, T3, T4> make_tuple(
		const T1 &t1,
		const T2 &t2,
		const T3 &t3,
		const T4 &t4)
	{
		return tuple<T1, T2, T3, T4>(t1, t2, t3, t4);
	}

	template<typename T1, typename T2, typename T3, typename T4, typename T5>
	static tuple<T1, T2, T3, T4, T5> make_tuple(
		const T1 &t1,
		const T2 &t2,
		const T3 &t3,
		const T4 &t4,
		const T5 &t5)
	{
		return tuple<T1, T2, T3, T4, T5>(t1, t2, t3, t4, t5);
	}

	template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
	static tuple<T1, T2, T3, T4, T5, T6> make_tuple(
		const T1 &t1,
		const T2 &t2,
		const T3 &t3,
		const T4 &t4,
		const T5 &t5,
		const T6 &t6)
	{
		return tuple<T1, T2, T3, T4, T5, T6>(t1, t2, t3, t4, t5, t6);
	}


	//--------------------------------------------------------------------------
}
}
}

using namespace ming::fyp::core;

#endif	//__ming_fyp_core_Tuple_h__